package com.dtx.day5.day5Field;

import com.dtx.day1.entity.Goods;
import org.junit.Test;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 获取属性Field
 */
public class TestField {

    @Test
    public void test() throws Exception{

        //通过反射，获取类中的属性
        Class<Goods> clz = Goods.class;

        // 获取 类中所有声明的属性
        Field[] declaredFields = clz.getDeclaredFields();

        //构建一个Goods对象
        Goods goods = clz.getDeclaredConstructor().newInstance();
        goods.setGoodsName("笔记本");
        goods.setGoodsPrice(new BigDecimal("500"));

        for (Field field : declaredFields) {

            // 破坏 封装 允许封装没有权限的 属性
            field.setAccessible(true);

            // 获取 属性名
            System.out.println(field.getName());
            // 获取 属性的 修饰符
            //System.out.println(field.getModifiers());
           // System.out.println(Modifier.isPrivate(field.getModifiers()));
            // 获取属性 类型
            //System.out.println(field.getType());

            // 修改属性值 ， 将 录入时间设置为 当前系统时间
            if ("createTime".equals(field.getName())) {
                field.set(goods,new Date());
            }

            // 获取属性的属性值
            Object o = field.get(goods);
            System.out.println(o);


        }

        // 获取 商品类中 商品描述属性
        Field goodsDescField = clz.getDeclaredField("goodsDesc");

        goodsDescField.setAccessible(true);
        goodsDescField.set(goods,"下v成本和封面和别的方面获得丰厚");
        System.out.println(goods.getGoodsDesc());

    }
}
